import java.util.*;
public class text {
    /*给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
    字母异位词 是由重新排列源单词的所有字母得到的一个新单词。*/
    public static List<List<String>> integrate(String[] arr) {
       //建立一个列表
        Map<String,List<String>> map=new HashMap<>();//目前列表形式【字符串：[符合的字符串集合]】
        //将每个字符串转换成字符数组
        for(String s:arr){
            char[] ch=s.toCharArray();
            //对元素排序
            Arrays.sort(ch);//得到初始目标字符串
            //再将数组转换为字符串
            String key=new String(ch);
            //定义List列表，并加入符合条件的集合，key,为集合目标，
            // 如果s排序后满足则加入这个集合中，反之创建一个新集合并以此不同字符串为集合目标
            List<String> list=map.getOrDefault(key,new ArrayList<>());
            //加入元素
            list.add(s);
            map.put(key,list);//将集合放入字符串列表中【key,符合目标的集合【---】】
        }
        //返回新列表，只返回列表中归纳的子集合值并并以列表的形式输出
        return new ArrayList<>(map.values());
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String[] arr=new String[n];
        for(int i=0;i<n;i++){
            arr[i]=sc.next();
        }
        List<List<String>> answer=integrate(arr);
        for(List<String> l:answer){
            System.out.println(l);
        }
    }
}
